package it.storm.solution;

import java.util.ArrayList;
import java.util.List;

/**
 * 1752. 检查数组是否经排序和轮转得到
 * https://leetcode-cn.com/problems/check-if-array-is-sorted-and-rotated/
 */
public class Solutions_1752 {
    public static void main(String[] args) {
        int[] nums1 = {3, 4, 5, 1, 2};  // output: true
        int[] nums2 = {2, 1, 3, 4};  // output: false
        int[] nums3 = {1, 2, 3};  // output: true
        int[] nums4 = {1, 1, 1};  // output: true
        int[] nums5 = {2, 1};  // output: true
        int[] nums6 = {3, 6, 10, 1, 8, 9, 9, 8, 9};  // output: false
        int[] nums7 = {2, 4, 1, 3};  // output: false

        List<int[]> inputs = new ArrayList<>();
        inputs.add(nums1);
        inputs.add(nums2);
        inputs.add(nums3);
        inputs.add(nums4);
        inputs.add(nums5);
        inputs.add(nums6);
        inputs.add(nums7);

        for (int[] input : inputs) {
            boolean result = check(input);
            System.out.println(result);
        }
    }

    /**
     * 解题思路：把数组看成一个环
     * 判断轮转是否正确：前一元素大于后一元素的次数不能超过 1 次
     * 关键：还需要判断末尾元素是否大于开头元素
     */
    public static boolean check(int[] nums) {
        int count = 0;
        int len = nums.length;

        for (int i = 1; i < len; i++) {
            if (nums[i] < nums[i - 1]) {
                count ++;
            }
        }
        if (nums[len - 1] > nums[0]) {
            count ++;
        }
        return count <= 1;
    }
}
